package com.demo.java.OD251_300.OD259;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.stream.IntStream;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【最大相连男生数】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146027073
 */
public class OdMain {
    private static int maxLen;  // 最大连续'M'的长度

    private static void solveMethod(int n, int m, char[][] matrix) {
        // 定义四个方向的操作：水平、垂直、对角线和反对角线
        final int[][] ACTIONS = {{0, 1}, {1, 0}, {1, 1}, {-1, -1}};

        // 使用并行流遍历矩阵中的每个位置，检查每个方向的连续'M'个数
        IntStream.range(0, n - maxLen)
                .parallel()
                .forEach(i -> IntStream.range(0, m - maxLen)
                        .parallel()
                        .forEach(j -> Arrays.stream(ACTIONS)
                                .parallel()
                                .forEach(action -> find(matrix, action, i, j))));

        // 输出最大的连续'M'个数
        System.out.println(maxLen);
    }

    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

        // 读取输入的矩阵的尺寸
        String[] split = reader.readLine().split(",");
        int n = Integer.parseInt(split[0]), m = Integer.parseInt(split[1]);

        // 初始化矩阵
        char[][] matrix = new char[n][m];

        // 读取矩阵数据
        for (int i = 0; i < n; ++i) {
            matrix[i] = reader.readLine().replaceAll(",", "").toCharArray();
        }

        // 调用解法方法
        solveMethod(n, m, matrix);
    }

    // 查找当前位置(start)在给定方向上的连续'M'个数
    private static void find(char[][] matrix, int[] action, int r, int c) {
        int count = 0;
        // 循环查找，直到越界
        while (r >= 0 && r < matrix.length && c >= 0 && c < matrix[0].length) {
            // 如果当前是'M'，则增加计数
            count = (matrix[r][c] == 'M') ? count + 1 : 0;
            // 更新最大连续'M'个数
            maxLen = Math.max(count, maxLen);
            r += action[0];
            c += action[1];
        }
    }
}